🗃️ Make archiving tables/applications a personal option#2476
Open
AndyScherzinger wants to merge 24 commits intomainfrom
Open
🗃️ Make archiving tables/applications a personal option#2476AndyScherzinger wants to merge 24 commits intomainfrom
AndyScherzinger wants to merge 24 commits intomainfrom
Conversation
008f4f3 to
0e2bbdc
Compare
d3fce3e to
fd235a6
Compare
jancborchardt
requested changes
Apr 28, 2026
Member
There was a problem hiding this comment.
Looks generally nice, 2 details
- I’d say to use outline icons instead of filled for both cases, archiving and unarchiving
- In the cases of "Archive app" and "Unarchive app", the sorting of actions in the menu is off. We always recommend the destructive action (Delete) to be the very last, and then the next most destructive like Archive could be directly above it.
fd235a6 to
ba16212
Compare
ed997d4 to
840a1ab
Compare
* add secondary index on (node_type, node_id) for deleteAllForNode * document why archived boolean columns are not indexed AI-assistant: Claude Code 2.1.101 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
AI-assistant: Claude Code 2.1.101 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
AI-assistant: Claude Code 2.1.101 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
AI-assistant: Claude Code 2.1.101 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
* clean up per-user archive records when table or context is deleted AI-assistant: Claude Code 2.1.101 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
…ransferred AI-assistant: Claude Code 2.1.101 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
AI-assistant: Claude Code 2.1.101 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
AI-assistant: Claude Code 2.1.101 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
AI-assistant: Claude Code 2.1.101 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
AI-assistant: Claude Code 2.1.101 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
AI-assistant: Claude Code 2.1.101 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
AI-assistant: Claude Code 2.1.101 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
AI-assistant: Claude Code 2.1.101 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
…tion AI-assistant: Claude Code 2.1.101 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
AI-assistant: Claude Code 2.1.101 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
…ic also checks for it anyways The context endpoints lack the #[RequirePermission] attribute that the table endpoints have. However the mapper enforces the same constraint, but is less explicit for future maintenance and for consistency with other endpoints AI-assistant: Claude Code v2.1.119 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Setting the parameter inside the loop preventing rebuilding the query representation if this really loops a lot. Co-authored-by: Christoph Wurst <1374172+ChristophWurst@users.noreply.github.com> Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
…ust getXXX Co-authored-by: Christoph Wurst <1374172+ChristophWurst@users.noreply.github.com> Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
AI-assistant: Claude Code 2.1.119 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
840a1ab to
086aad3
Compare
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The original ticket #2125 defined tables and views, while this PR tacked tables and apps. Given a clear view on how archived views should get displayed this could be added as a follow-up PR to not make this PR grow in review-size and complexity.
Summary
archivedflag on tables with a two-layer per-user model: an owner-level flag on the entity and a newtables_archive_usertable that stores individual user overrides, so archive state is resolved per-user at read time. When an owner archives a table or application, it is automatically treated as archived for every user with access, but any of those users may override this for themselves; an owner unarchiving resets the state for everyone by clearing all per-user overrides.tables_tables.archivedcolumn is repurposed from a simple global toggle into the owner-level signal, and the database migration converts all currently-archived tables into owner-archived entries to preserve existing data without disruption.ArchiveServicecentralizes all business logic for both resource types, four new API endpoints are split acrossApiTablesControllerandContextControllerfollowing existing naming conventions, and the frontend gains archive/unarchive actions in both navigation item menus alongside a new collapsible "Archived applications" section mirroring the already-existing "Archived tables" section.The database migration only covers the owner and direct user shares, not groups, etc. since they can't be resolved directly via SQL (think teams/groups). So in these cases archived tables would resurface until manually archived by the respective user. Also there is no cleanup for teams/groups, if a user is taken out of a team, the archive meta-info would not get deleted. Only simple but confusing way around it would be to prevent archiving/unarchiving for tables/apps where a user is neither the owner nor a user-share receiver. Expensive alternative would be a housekeeping job checking all these archive bits periodically, but that also sounds expensive with little use. Else we would need to consume a team/group changes event and check if some cleanup is needed. WDYT?